This is an evolving analysis of the Electronic Surgical Discharge Dataset

Completion Analysis

Overall Completion Fraction

Patient Searching

Distribution of Common Last Names

Last Name Frequency

Demographic Analysis

Ethnicity

Ethnicity Percentage (%) Lower 95% CI Upper 95% CI
Asian 0.03 0.00 0.48
Black 92.30 91.85 92.76
Coloured 2.96 2.51 3.42
Indian 1.49 1.05 1.95
Other 0.16 0.00 0.62
White 3.06 2.61 3.51

Sex

Gender Percentage (%) Lower 95% CI Upper 95% CI
Female 52.81 51.84 53.77
Male 47.14 46.17 48.11
Other 0.05 0.00 1.02

Age Group

Age Group Percentage (%) Lower 95% CI Upper 95% CI
Infant 0.28 0.00 1.27
Preschool Child 0.00 0.00 0.99
Child 1.48 0.49 2.46
Adolescent 4.02 3.03 5.00
Young Adult 6.00 5.02 6.99
Adult 34.09 33.11 35.08
Middle Aged 35.87 34.88 36.85
Aged 14.99 14.01 15.98
80+ 3.28 2.29 4.26

Length of Stay Analysis

7.97% of patient’s were assessed to have outlier length of stays. This was assessed by means of a cutoff of \(1.5*IQR\) below the first and above the third quartile.

Patient length of stay density visualization

3D Plot

2D Plot

Length of Stay by Age Group

ICD Analysis

ICD Chapter Percentage (%) Lower 95% CI Upper 95% CI
Infectious & Parasitic 3.36 2.34 4.39
Neoplasms 18.67 17.66 19.71
Blood & Immune 0.48 0.00 1.51
Endocrine, etc 2.55 1.53 3.58
Mental & Behavioural 0.23 0.00 1.27
Nervous System 0.19 0.00 1.22
Eye & Adnexa 0.05 0.00 1.09
Ear & Mastoid 0.02 0.00 1.05
Circulatory System 5.37 4.35 6.40
Respiratory System 0.47 0.00 1.50
Digestive System 48.53 47.51 49.56
Skin & Subcutaneous 5.78 4.76 6.81
Musculoskeletal 1.15 0.13 2.18
Genitourinary System 2.96 1.94 3.99
Pregnancy 1.09 0.07 2.13
Perinatal 0.02 0.00 1.05
Congenital 0.45 0.00 1.48
Abnormal Findings 1.80 0.78 2.84
Injury, Poisoning, etc 1.00 0.00 2.03
Morbidity & Mortality 0.15 0.00 1.18
Influencing Factors 0.90 0.00 1.93
Special Purpose 0.01 0.00 1.04
Neoplasm Morphology 4.78 3.76 5.82

Full Dataset

Top Ten Codes

Demographic ICD Flow

ICD Chapter Sankey Flow

ICD Code Sankey Flow

LS0tDQp0aXRsZTogIkVEIEFuYWx5c2lzIg0KYXV0aG9yOiAiQnJhZCBTZWdhbCINCmRhdGU6ICI3LzE1LzIwMTkiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgY2FjaGU9VFJVRX0NCnJlcXVpcmUoa25pdHIpDQpyZXF1aXJlKHJlYWR4bCkNCnJlcXVpcmUodGlkeXZlcnNlKQ0KcmVxdWlyZShkcGx5cikNCnJlcXVpcmUoYW9kKQ0KcmVxdWlyZShnZ3Bsb3QyKQ0KcmVxdWlyZShwbG90bHkpDQpyZXF1aXJlKHhsc3gpDQpyZXF1aXJlKERlc2NUb29scykNCnJlcXVpcmUoUHJvcENJcykNCnJlcXVpcmUoZ2dhbGx1dmlhbCkNCnJlcXVpcmUodmNkKQ0KcmVxdWlyZShyZ2wpDQpyZXF1aXJlKHJheXNoYWRlcikNCnJlcXVpcmUobHVicmlkYXRlKQ0KcmVxdWlyZSh6b28pDQpyZXF1aXJlKHJlc2hhcGUyKQ0KcmVxdWlyZShIbWlzYykNCnJlcXVpcmUobWFncml0dHIpDQpyZXF1aXJlKHJnbHdpZGdldCkNCnJlcXVpcmUoaHRtbHRvb2xzKQ0KcmVxdWlyZShybWFya2Rvd24pDQpyZXF1aXJlKGZvcm1hdHRhYmxlKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0Ka25pdHI6OmtuaXRfaG9va3Mkc2V0KHJnbCA9IGhvb2tfcmdsKQ0KDQpFRCA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL1BhdGllbnQgRXh0cmFjdC1CcmFkLVBDLnhsc3giLA0KICAgIGNvbF90eXBlcyA9IGMoDQogICAgICAibnVtZXJpYyIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAiZGF0ZSIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAiZGF0ZSINCiAgICApDQogICkNCg0KRGlzY2hhcmdlIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJEaXNjaGFyZ2VSZWNvcmRzIiwNCiAgICBjb2xfdHlwZXMgPSBjKA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgIm51bWVyaWMiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgInRleHQiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiLA0KICAgICAgImRhdGUiLA0KICAgICAgImRhdGUiLA0KICAgICAgInRleHQiDQogICAgKQ0KICApDQpEaWFnbm9zaXMgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIkRpYWdub3NpcyIsDQogICAgY29sX3R5cGVzID0gYygibnVtZXJpYyIsDQogICAgICAgICAgICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgInRleHQiKQ0KICApDQpJQ0QgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIklDRDEwQ29kZSIsDQogICAgY29sX3R5cGVzID0gYygibnVtZXJpYyIsDQogICAgICAgICAgICAgICAgICAibnVtZXJpYyIsICJ0ZXh0IiwgInRleHQiKQ0KICApDQpJQ0RCbG9jayA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL0Z1bGwgRUQgRGF0YWJhc2UueGxzeCIsDQogICAgc2hlZXQgPSAiSUNEMTBDb2RlQmxvY2siLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIpDQogICkNCklDRENoYXAgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIklDRDEwQ29kZUNoYXB0ZXIiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgInRleHQiLCAidGV4dCIpDQogICkNCkNvbXBsaWNhdGlvbnMgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIkNvbXBsaWNhdGlvbnMiLA0KICAgIGNvbF90eXBlcyA9IGMoDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAiZGF0ZSIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAibnVtZXJpYyINCiAgICApDQogICkNClJhZGlvbG9neSA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL0Z1bGwgRUQgRGF0YWJhc2UueGxzeCIsDQogICAgc2hlZXQgPSAiUmFkaW9sb2dpZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIsICJ0ZXh0IiwgImRhdGUiLA0KICAgICAgICAgICAgICAgICAgInRleHQiKQ0KICApDQpNZWRpY2F0aW9uIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJNZWRpY2F0aW9ucyIsDQogICAgY29sX3R5cGVzID0gYygibnVtZXJpYyIsDQogICAgICAgICAgICAgICAgICAibnVtZXJpYyIsICJ0ZXh0IiwgInRleHQiLCAidGV4dCIsDQogICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IikNCiAgKQ0KSUNVIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJJQ1VIaWdoQ2FyZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIsICJkYXRlIiwgImRhdGUiLA0KICAgICAgICAgICAgICAgICAgInRleHQiKQ0KICApDQpQcm9jZWR1cmUgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIlByb2NlZHVyZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoDQogICAgICAibnVtZXJpYyIsDQogICAgICAibnVtZXJpYyIsDQogICAgICAiZGF0ZSIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAidGV4dCIsDQogICAgICAibnVtZXJpYyINCiAgICApDQogICkNClByb2NDb2RlcyA8LQ0KICByZWFkX2V4Y2VsKA0KICAgICJEOi9PbmVEcml2ZS9PbmVEcml2ZS9Eb2N1bWVudHMvTUJCQ2gvUmVzZWFyY2ggUHJvamVjdHMvQklTL0VEL0Z1bGwgRUQgRGF0YWJhc2UueGxzeCIsDQogICAgc2hlZXQgPSAiUHJvY2VkdXJlQ29kZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgIm51bWVyaWMiLCAidGV4dCIsICJ0ZXh0IikNCiAgKQ0KUHJvY0NvZGVUeXBlIDwtDQogIHJlYWRfZXhjZWwoDQogICAgIkQ6L09uZURyaXZlL09uZURyaXZlL0RvY3VtZW50cy9NQkJDaC9SZXNlYXJjaCBQcm9qZWN0cy9CSVMvRUQvRnVsbCBFRCBEYXRhYmFzZS54bHN4IiwNCiAgICBzaGVldCA9ICJQcm9jZWR1cmVDb2RlVHlwZXMiLA0KICAgIGNvbF90eXBlcyA9IGMoIm51bWVyaWMiLA0KICAgICAgICAgICAgICAgICAgInRleHQiKQ0KICApDQpIaXN0b2xvZ3kgPC0NCiAgcmVhZF9leGNlbCgNCiAgICAiRDovT25lRHJpdmUvT25lRHJpdmUvRG9jdW1lbnRzL01CQkNoL1Jlc2VhcmNoIFByb2plY3RzL0JJUy9FRC9GdWxsIEVEIERhdGFiYXNlLnhsc3giLA0KICAgIHNoZWV0ID0gIkhpc3RvbG9naWVzIiwNCiAgICBjb2xfdHlwZXMgPSBjKCJudW1lcmljIiwNCiAgICAgICAgICAgICAgICAgICJudW1lcmljIiwgImRhdGUiLCAidGV4dCIsICJ0ZXh0IikNCiAgKQ0KDQojIC0tIEZ1bmN0aW9ucyAtLQ0KY29tcGxldGlvbiA8LSBmdW5jdGlvbihpbnB1dCkgew0KICB0ZXN0IDwtIGMoKQ0KICB0ZXN0X2NvdW50IDwtIGMoKQ0KICBmb3IgKHZlYyBpbiAxOmxlbmd0aChpbnB1dCkpIHsNCiAgICB2YXJfY291bnQgPC0gaW5wdXQgJT4lDQogICAgICBmaWx0ZXIoIWlzLm5hKGlucHV0W3ZlY10pIHwgaW5wdXRbdmVjXSAhPSAwKSAlPiUNCiAgICAgIGNvdW50KCkNCiAgICB0ZXN0IDwtIHJiaW5kKHRlc3QsIG5hbWVzKGlucHV0KVt2ZWNdKQ0KICAgIHRlc3RfY291bnQgPC0NCiAgICAgIHJiaW5kKHRlc3RfY291bnQsIHJvdW5kKCh2YXJfY291bnQkbiAvIGNvdW50KGlucHV0KSRuKSwgMikpDQogIH0NCiAgcmV0dXJuKGRhdGEuZnJhbWUodmFyaWFibGUgPSB0ZXN0LCBmcmFjdGlvbiA9IHRlc3RfY291bnQpKQ0KfQ0KDQpEYXRhU3VtbWFyeSA8LSBmdW5jdGlvbihpbnB1dCkgew0KICBmaXZlX251bSA8LSBmaXZlbnVtKGlucHV0KQ0KICBNZWFuIDwtIG1lYW4oaW5wdXQpDQogIFNEIDwtIHNkKGlucHV0KQ0KICB1cHBDSSA8LSBNZWFuICsgMiAqIFNEDQogIGxvd0NJIDwtIE1lYW4gLSAyICogU0QNCiAgb3V0cHV0IDwtDQogICAgZGF0YS5mcmFtZSgNCiAgICAgIE1pbiA9IGZpdmVfbnVtWzFdLA0KICAgICAgIlF1YXJ0aWxlIDEiID0gZml2ZV9udW1bMl0sDQogICAgICBNZWRpYW4gPSBmaXZlX251bVszXSwNCiAgICAgICJRdWFydGlsZSAzIiA9IGZpdmVfbnVtWzRdLA0KICAgICAgTWF4ID0gZml2ZV9udW1bNV0sDQogICAgICBJUVIgPSBmaXZlX251bVs0XSAtIGZpdmVfbnVtWzJdLA0KICAgICAgU0QsDQogICAgICBNZWFuLA0KICAgICAgJ1VwcGVyLkNJJyA9IHVwcENJLA0KICAgICAgJ0xvd2VyLkNJJyA9IGxvd0NJDQogICAgKQ0KICByZXR1cm4ob3V0cHV0KQ0KfQ0KDQptb250aF9jb21wIDwtIGZ1bmN0aW9uKGlucHV0KSB7DQogIGNvbXAgPC0gTlVMTA0KICBmb3IgKGsgaW4gMToxMikgew0KICAgIG1vbnRoIDwtIE1lcmdlZElDRCAlPiUNCiAgICAgIGZpbHRlcihhcy5udW1lcmljKGZvcm1hdChNZXJnZWRJQ0QkRW5yb2wsICclWScpKSA9PSBpbnB1dCwgYXMubnVtZXJpYyhmb3JtYXQoTWVyZ2VkSUNEJEVucm9sLCAnJW0nKSkgPT0gaykNCiAgICAjIHByaW50KG5yb3cobW9udGgpKQ0KICAgIGlmIChucm93KG1vbnRoKSA9PSAwKSB7DQogICAgICBtb250aCA8LSBjb21wbGV0aW9uKG1vbnRoKQ0KICAgICAgbW9udGggPC0gbXV0YXRlKG1vbnRoLCBmcmFjdGlvbiA9IDAuMCkNCiAgICB9IGVsc2V7DQogICAgICBtb250aCA8LSBjb21wbGV0aW9uKG1vbnRoKQ0KICAgIH0NCiAgICBtb250aCA8LSBtb250aCAlPiUNCiAgICAgIHJlbmFtZSghIXBhc3RlKGspIDo9IGZyYWN0aW9uKSAjTmV3IGV4cHJlc3Npb24gZW5hYmxlcyBuYW1pbmcgb2YgYSB2YXJpYWJsZSBieSBhIHN0cmluZw0KICAgIGlmIChrID09IDEpIHsNCiAgICAgIGNvbXAgPC0gbW9udGgNCiAgICB9IGVsc2V7DQogICAgICBjb21wIDwtIGxlZnRfam9pbihjb21wLCBtb250aCkNCiAgICB9DQogICAgI3ByaW50KGNvbXApDQogIH0NCiAgY29tcCA8LSBjb2x1bW5fdG9fcm93bmFtZXMoY29tcCwgdmFyID0gInZhcmlhYmxlIikNCiAgcmV0dXJuKGNvbXApDQp9DQoNCiNDYWxjdWxhdGUgOTUlIENJcyBmcm9tIEV0aG5pY2l0aWVzIOKGkiBFeHRyYWN0cyBWYXJpYWJsZXMgJiBUaXRsZXMgZnJvbSBUYWJsZSBTdW1tYXJ5DQojSW5wdXQgaXMgQXJyYXkgRmlsdGVyZWQgb24gRmllbGQgb2YgSW50ZXJlc3QNCk11bHRpX0NJIDwtIGZ1bmN0aW9uKGlucHV0KSB7DQogIENJIDwtIGRhdGEuZnJhbWUoRmllbGRzID0gbmFtZXModGFibGUoaW5wdXQpKSwNCiAgICAgICAgICAgICBNdWx0aW5vbUNJKA0KICAgICAgICAgICAgICAgYXMudmVjdG9yKHRhYmxlKGlucHV0KSksDQogICAgICAgICAgICAgICBjb25mLmxldmVsID0gMC45NSwNCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJzaXNvbmdsYXoiDQogICAgICAgICAgICAgKSkNCiAgQ0kkZXN0IDwtIHJvdW5kKENJJGVzdCoxMDAsIDIpDQogIENJJGx3ci5jaSA8LSByb3VuZChDSSRsd3IuY2kqMTAwLCAyKQ0KICBDSSR1cHIuY2kgPC0gcm91bmQoQ0kkdXByLmNpKjEwMCwgMikNCiAgQ0kgPC1DSSAlPiUNCiAgICByZW5hbWUoIlBlcmNlbnRhZ2UgKCUpIiA9ICJlc3QiLCAiTG93ZXIgOTUlIENJIiA9IGx3ci5jaSwgIlVwcGVyIDk1JSBDSSIgPSB1cHIuY2kpDQogIHJldHVybihDSSkNCn0NCg0KDQphZ2VfZ3JvdXBzIDwtIGZ1bmN0aW9uKGlucHV0KSB7DQogIGdyb3VwIDwtICIiDQogIGlmIChpbnB1dCA8IDIpIHsNCiAgICBncm91cCA8LSAiSW5mYW50Ig0KICB9DQogIGlmIChpbnB1dCA+PSAyICYmIGlucHV0IDwgNikgew0KICAgIGdyb3VwIDwtICJQcmVzY2hvb2wgQ2hpbGQiDQogIH0NCiAgaWYgKGlucHV0ID49IDYgJiYgaW5wdXQgPCAxMykgew0KICAgIGdyb3VwIDwtICJDaGlsZCINCiAgfQ0KICBpZiAoaW5wdXQgPj0gMTMgJiYgaW5wdXQgPCAxOSkgew0KICAgIGdyb3VwIDwtICJBZG9sZXNjZW50Ig0KICB9DQogIGlmIChpbnB1dCA+PSAxOSAmJiBpbnB1dCA8IDI1KSB7DQogICAgZ3JvdXAgPC0gIllvdW5nIEFkdWx0Ig0KICB9DQogIGlmIChpbnB1dCA+PSAyNSAmJiBpbnB1dCA8IDQ1KSB7DQogICAgZ3JvdXAgPC0gIkFkdWx0Ig0KICB9DQogIGlmIChpbnB1dCA+PSA0NSAmJiBpbnB1dCA8IDY1KSB7DQogICAgZ3JvdXAgPC0gIk1pZGRsZSBBZ2VkIg0KICB9DQogIGlmIChpbnB1dCA+PSA2NSAmJiBpbnB1dCA8IDgwKSB7DQogICAgZ3JvdXAgPC0gIkFnZWQiDQogIH0NCiAgaWYgKGlucHV0ID49IDgwKSB7DQogICAgZ3JvdXAgPC0gIjgwKyINCiAgfQ0KICByZXR1cm4oZ3JvdXApDQp9DQoNCmFnZV9saXN0IDwtIGMoDQogICJJbmZhbnQiLA0KICAiUHJlc2Nob29sIENoaWxkIiwNCiAgIkNoaWxkIiwNCiAgIkFkb2xlc2NlbnQiLA0KICAiWW91bmcgQWR1bHQiLA0KICAiQWR1bHQiLA0KICAiTWlkZGxlIEFnZWQiLA0KICAiQWdlZCIsDQogICI4MCsiDQopDQoNCm91dGxpZXJUZXN0IDwtIGZ1bmN0aW9uKHZhbElucHV0LCBzdW1tYXJ5SW5wdXQpIHsNCiAgb3V0bGllciA8LSBjKCkNCiAgZm9yICh2ZWMgaW4gdmFsSW5wdXQpIHsNCiAgICBpZiAodmVjID4gKHN1bW1hcnlJbnB1dCRRdWFydGlsZS4zICsgMS41ICogc3VtbWFyeUlucHV0JElRUikgfA0KICAgICAgICB2ZWMgPCAoc3VtbWFyeUlucHV0JFF1YXJ0aWxlLjEgLSAxLjUgKiBzdW1tYXJ5SW5wdXQkSVFSKSkgew0KICAgICAgb3V0bGllciA8LSByYmluZChvdXRsaWVyLCBUUlVFKQ0KICAgIH0gZWxzZXsNCiAgICAgIG91dGxpZXIgPC0gcmJpbmQob3V0bGllciwgRkFMU0UpDQogICAgfQ0KICB9DQogIHJldHVybihvdXRsaWVyKQ0KfQ0KDQpTdW1tYXJ5X1RhYmxlIDwtIGZ1bmN0aW9uKGlucHV0KXsNCiAgZnVsbF9zdW0gPC0gYXMuZGF0YS5mcmFtZSh0KERhdGFTdW1tYXJ5KGlucHV0KSkpICU+JQ0KICAgIHJlbmFtZShWYWx1ZXMgPSBWMSkgJT4lDQogICAgcm91bmQoMikgJT4lDQogICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJTdW1tYXJ5IikgDQogIGZ1bGxfc3VtWzksMV0gPC0gIlVwcGVyIDk1JSBDSSINCiAgZnVsbF9zdW1bMTAsMV0gPC0gIkxvd2VyIDk1JSBDSSINCiAgDQogIGZvcm1hdHRhYmxlKA0KICAgIGZ1bGxfc3VtLA0KICAgIGFsaWduID0gYygibCIsIHJlcCgiciIsIE5DT0woZnVsbF9zdW0pIC0gMSkpLA0KICAgIGxpc3QoDQogICAgICAiU3VtbWFyeSIgPSBmb3JtYXR0ZXIoInNwYW4iLCBzdHlsZSA9IH4gc3R5bGUoDQogICAgICAgIGNvbG9yID0gIkdyZXkiLCBmb250LndlaWdodCA9ICJib2xkIg0KICAgICAgKSksIGBWYWx1ZXNgID0gY29sb3JfdGlsZSgiI2FjZGVlZiIsICIjYmZmZmZmIikNCiAgICApDQogICkNCn0NCg0KZ3JlZW5fbWluIDwtICIjZTdmZmVlIg0KZ3JlZW5fbWF4IDwtICIjNGFiNzZjIg0KYGBgDQojIyMjIFRoaXMgaXMgYW4gZXZvbHZpbmcgYW5hbHlzaXMgb2YgdGhlIEVsZWN0cm9uaWMgU3VyZ2ljYWwgRGlzY2hhcmdlIERhdGFzZXQNCg0KIyMgQ29tcGxldGlvbiBBbmFseXNpcw0KYGBge3IgRUQsIGVjaG89RkFMU0V9DQpFRCA8LSAgRUQgJT4lDQogIHJvd3dpc2UoKSAlPiUNCiAgbXV0YXRlKEFnZV9Hcm91cCA9IGFnZV9ncm91cHMoYWdlKSkNCg0KRUQkQWdlX0dyb3VwIDwtIG9yZGVyZWQoDQogIEVEJEFnZV9Hcm91cCwNCiAgbGV2ZWxzID0gYWdlX2xpc3QNCikNCnN1cHByZXNzTWVzc2FnZXMoDQpNZXJnZWRJQ0QgPC0gbGVmdF9qb2luKHggPSBEaXNjaGFyZ2UsIHkgPSBEaWFnbm9zaXMpICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBJQ0QpICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBJQ0RCbG9jaykgJT4lDQogIGxlZnRfam9pbih4ID0gLiwgeSA9IElDRENoYXApICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBFRCkNCikNCg0KY291bnRfdGFibGUgPC0gY29tcGxldGlvbihNZXJnZWRJQ0QpDQoNCmNvbXBsZXRpb25fcGxvdCA8LQ0KICBnZ3Bsb3QoZGF0YSA9IGNvdW50X3RhYmxlKSArIGdlb21fY29sKG1hcHBpbmcgPSBhZXMoeCA9IHZhcmlhYmxlLCB5ID0gZnJhY3Rpb24pLCBmaWxsID0gJ2RvZGdlcmJsdWUnKSArDQogIGxhYnModGl0bGUgPSAiUmVjb3JkIENvbXBsZXRpb24gRnJhY3Rpb24iLCB4ID0gIlJlY29yZHMiLCB5ID0gIkNvbXBsZXRpb24gRnJhY3Rpb24iKSArIGNvb3JkX2ZsaXAoKSArIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpKQ0KYGBgDQojIyMgT3ZlcmFsbCBDb21wbGV0aW9uIEZyYWN0aW9uDQpgciBnZ3Bsb3RseShjb21wbGV0aW9uX3Bsb3QsIGhlaWdodCA9IDEwMDApYA0KDQojIyBQYXRpZW50IFNlYXJjaGluZw0KIyMjIERpc3RyaWJ1dGlvbiBvZiBDb21tb24gTGFzdCBOYW1lcw0KYGBge3IgU2VhcmNoLCBlY2hvPUZBTFNFLCBmaWcuYWxpZ24gPSAiY2VudGVyIn0NCkxhc3RfQ291bnQgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShFRCRsYXN0TmFtZSkpDQoNCkxhc3RfQm94IDwtIExhc3RfQ291bnQgJT4lDQogIGZpbHRlcihGcmVxID4gMTApICU+JQ0KICBzZWxlY3QoRnJlcSkgJT4lDQogIGJveHBsb3QoDQogICAgLiwNCiAgICBtYWluID0gIkRpc3RyaWJ1dGlvbiBvZiBMYXN0IE5hbWVzIGFwcGVhcmluZyBtb3JlIHRoYW4gMTAgdGltZXMgaW4gRUQiLA0KICAgIHhsYWIgPSAiRnJlcXVlbmN5IiwNCiAgICB5bGFiID0gIkxhc3QgTmFtZXMiLA0KICAgIGNvbCA9ICJyZWQiLA0KICAgIGJvcmRlciA9ICJibGFjayIsDQogICAgaG9yaXpvbnRhbCA9IFRSVUUsDQogICAgbm90Y2ggPSBGQUxTRQ0KICApDQoNCkxhc3RfU3RyaXAgPC1MYXN0X0NvdW50ICU+JQ0KICBmaWx0ZXIoRnJlcSA+IDEwKSAlPiUNCiAgc2VsZWN0KEZyZXEpICU+JQ0KICBzdHJpcGNoYXJ0KA0KICAgIC4sDQogICAgeGxhYiA9ICJGcmVxdWVuY3kiLA0KICAgIHlsYWIgPSAiTGFzdCBOYW1lcyIsDQogICAgbWV0aG9kID0gImppdHRlciIsDQogICAgY29sID0gImJsYWNrIg0KICApDQpgYGANCiMjIyBMYXN0IE5hbWUgRnJlcXVlbmN5DQpgYGB7ciBTZWFyY2ggMiwgZWNobz1GQUxTRSwgZmlnLmFsaWduID0gImNlbnRlciJ9DQoNCmhpc3QoTGFzdF9Db3VudCRGcmVxLCBtYWluID0gIkhpc3RvZ3JhbSBvZiBMYXN0IE5hbWVzIiwgeGxhYiA9ICJMYXN0IE5hbWUgT2NjdXJlbmNlIikNCg0KTGFzdF9Db3VudCRGcmVxICU+JQ0KICB0YWJsZSgpICU+JQ0KICBhcy52ZWN0b3IoKSAlPiUNCiAgY3Vtc3VtKCkgJT4lDQogIGJhcnBsb3QoKQ0KYGBgDQoNCmBgYHtyIFNlYXJjaCAzLCBlY2hvPUZBTFNFfQ0KI0dyb3VwaW5nIGJ5IEZ1bGwgU3VybmFtZSAmIEZ1bGwgTmFtZQ0KY291bnRfbmFtZXMgIDwtIEVEICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIGdyb3VwX2J5KGxhc3ROYW1lLCBmaXJzdE5hbWUpICU+JQ0KICBjb3VudCgpICU+JQ0KICByZW5hbWUoQ291bnQgPSBuKQ0KDQojR3JvdXBpbmcgYnkgRnVsbCBTdXJuYW1lICYgRmlyc3QgSW5pdGlhbA0KY291bnRfaW5pdGlhbCA8LSBFRCAlPiUNCiAgbXV0YXRlKGluaXRpYWxzID0gc3Vic3RyKGZpcnN0TmFtZSwgc3RhcnQgPSAxLCBzdG9wID0gMSkpICU+JQ0KICB1bmdyb3VwKCkgJT4lDQogIGdyb3VwX2J5KGxhc3ROYW1lLCBpbml0aWFscykgJT4lDQogIGNvdW50KCkgJT4lDQogIHJlbmFtZShDb3VudCA9IG4pDQoNCmZ1bGxfdGFiIDwtIFN1bW1hcnlfVGFibGUoY291bnRfbmFtZXMkQ291bnQpDQppbml0aWFsX3RhYiA8LSBTdW1tYXJ5X1RhYmxlKGNvdW50X2luaXRpYWwkQ291bnQpDQpgYGANCiMjIyBGdWxsIEZpcnN0IE5hbWUgJiBMYXN0IE5hbWUgU2VhcmNoDQpgciBmdWxsX3RhYmANCiMjIyBGaXJzdCBJbml0aWFsICYgTGFzdCBOYW1lIFNlYXJjaA0KYHIgaW5pdGlhbF90YWJgDQoNCiMjIERlbW9ncmFwaGljIEFuYWx5c2lzDQpgYGB7ciBEZW1vZ3JhcGhpYywgZWNobz1GQUxTRX0NCiNEZW1vZ3JhcGhpYyBHcm91cGluZw0KRXRobmljaXR5X0JhciA8LSAgDQogIGdncGxvdChFRCwgYWVzKHggPSBldGhuaWNpdHkpKSArIGdlb21fYmFyKGZpbGwgPSAncmVkJykgKyBnZW9tX3RleHQoDQogICAgc3RhdCA9ICdjb3VudCcsDQogICAgYWVzKGxhYmVsID0gLi5jb3VudC4uKSwNCiAgICB2anVzdCA9IC0wLjMsDQogICAgc2l6ZSA9IDMuNQ0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9IHBhc3RlKA0KICAgICAgIkRpc3RyaWJ1dGlvbiBvZiBFdGhuaWNpdGllcyBpbiBFRCAobiA9ICIsDQogICAgICBucm93KEVEKSwNCiAgICAgICIpIiwNCiAgICAgIHNlcCA9ICIiDQogICAgKSwNCiAgICB5ID0gIkNvdW50IiwNCiAgICB4ID0gIkV0aG5pY2l0aWVzIg0KICApICsgdGhlbWUoDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKQ0KDQpHZW5kZXJfQmFyIDwtDQogIGdncGxvdChFRCwgYWVzKHggPSBnZW5kZXIpKSArIGdlb21fYmFyKGZpbGwgPSAncmVkJykgKyBnZW9tX3RleHQoDQogICAgc3RhdCA9ICdjb3VudCcsDQogICAgYWVzKGxhYmVsID0gLi5jb3VudC4uKSwNCiAgICB2anVzdCA9IC0wLjMsDQogICAgc2l6ZSA9IDMuNQ0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9IHBhc3RlKA0KICAgICAgIkRpc3RyaWJ1dGlvbiBvZiBTZXggaW4gRUQgKG4gPSAiLA0KICAgICAgbnJvdyhFRCksDQogICAgICAiKSIsDQogICAgICBzZXAgPSAiIg0KICAgICksDQogICAgeSA9ICJDb3VudCIsDQogICAgeCA9ICJTZXgiDQogICkgKyB0aGVtZSgNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQoNCkV0aG5pY2l0eV9HZW5kZXIgPC0gZ2dwbG90KEVELCBhZXMoeCA9IGV0aG5pY2l0eSwgZmlsbCA9IGdlbmRlcikpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogICAgbGFicygNCiAgICAgIHRpdGxlID0gIkV0aG5pY2l0eSAmIEdlbmRlciBEaXZpc2lvbnMiLA0KICAgICAgeCA9ICJFdGhuaWNpdGllcyIsDQogICAgICB5ID0gIkNvdW50IiwNCiAgICAgIGZpbGwgPSAiR2VuZGVyIg0KKSsgdGhlbWUoDQogIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpDQopDQoNCkFnZV9CYXIgPC0NCiAgZ2dwbG90KEVELCBhZXMoeCA9IEFnZV9Hcm91cCkpICsgZ2VvbV9iYXIoZmlsbCA9ICdyZWQnKSArIGdlb21fdGV4dCgNCiAgICBzdGF0ID0gJ2NvdW50JywNCiAgICBhZXMobGFiZWwgPSAuLmNvdW50Li4pLA0KICAgIHZqdXN0ID0gLTAuMywNCiAgICBzaXplID0gMy41DQogICkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gcGFzdGUoDQogICAgICAiRGlzdHJpYnV0aW9uIG9mIEFnZSBHcm91cHMgaW4gRUQgKG4gPSAiLA0KICAgICAgbnJvdyhFRCksDQogICAgICAiKSIsDQogICAgICBzZXAgPSAiIg0KICAgICksDQogICAgeSA9ICJDb3VudCIsDQogICAgeCA9ICJBZ2UgR3JvdXBzIg0KICApICsgdGhlbWUoDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKSArIGNvb3JkX2ZsaXAoKQ0KDQpSYWNlX0NJIDwtIE11bHRpX0NJKEVEJGV0aG5pY2l0eSkgJT4lDQogIHJlbmFtZSgiRXRobmljaXR5IiA9IEZpZWxkcykNClJhY2VfVGFiIDwtIGZvcm1hdHRhYmxlKA0KICBSYWNlX0NJLA0KICBhbGlnbiA9IGMoImwiLCByZXAoInIiLCBOQ09MKFJhY2VfQ0kpIC0gMSkpLA0KICBsaXN0KA0KICAgICJFdGhuaWNpdHkiID0gZm9ybWF0dGVyKCJzcGFuIiwgc3R5bGUgPSB+IHN0eWxlKA0KICAgICAgY29sb3IgPSAiR3JleSIsIGZvbnQud2VpZ2h0ID0gImJvbGQiDQogICAgKSksDQogICAgIlBlcmNlbnRhZ2UgKCUpIiA9IGNvbG9yX3RpbGUoZ3JlZW5fbWluLCBncmVlbl9tYXgpDQogICkNCikNCg0KR2VuZGVyX0NJIDwtIE11bHRpX0NJKEVEJGdlbmRlcikgJT4lDQogIHJlbmFtZSgiR2VuZGVyIiA9IEZpZWxkcykNCkdlbmRlcl9UYWIgPC0gZm9ybWF0dGFibGUoDQogIEdlbmRlcl9DSSwNCiAgYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgTkNPTChHZW5kZXJfQ0kpIC0gMSkpLA0KICBsaXN0KA0KICAgICJHZW5kZXIiID0gZm9ybWF0dGVyKCJzcGFuIiwgc3R5bGUgPSB+IHN0eWxlKA0KICAgICAgY29sb3IgPSAiR3JleSIsIGZvbnQud2VpZ2h0ID0gImJvbGQiDQogICAgKSksDQogICAgIlBlcmNlbnRhZ2UgKCUpIiA9IGNvbG9yX3RpbGUoZ3JlZW5fbWluLCBncmVlbl9tYXgpDQogICkNCikNCg0KQWdlX0NJIDwtIE11bHRpX0NJKEVEJEFnZV9Hcm91cCkgJT4lDQogIHJlbmFtZSgiQWdlIEdyb3VwIiA9IEZpZWxkcykNCkFnZV9UYWIgPC0gZm9ybWF0dGFibGUoDQogIEFnZV9DSSwNCiAgYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgTkNPTChBZ2VfQ0kpIC0gMSkpLA0KICBsaXN0KA0KICAgICJBZ2UgR3JvdXAiID0gZm9ybWF0dGVyKCJzcGFuIiwgc3R5bGUgPSB+IHN0eWxlKA0KICAgICAgY29sb3IgPSAiR3JleSIsIGZvbnQud2VpZ2h0ID0gImJvbGQiDQogICAgKSksDQogICAgIlBlcmNlbnRhZ2UgKCUpIiA9IGNvbG9yX3RpbGUoZ3JlZW5fbWluLCBncmVlbl9tYXgpDQogICkNCikNCmBgYA0KIyMjIEV0aG5pY2l0eSANCmByIGdncGxvdGx5KEV0aG5pY2l0eV9CYXIpYA0KYHIgUmFjZV9UYWJgDQojIyMgU2V4DQpgciBnZ3Bsb3RseShHZW5kZXJfQmFyKWANCmByIEdlbmRlcl9UYWJgIA0KDQpgciBnZ3Bsb3RseShFdGhuaWNpdHlfR2VuZGVyKWANCg0KIyMjIEFnZSBHcm91cA0KYHIgZ2dwbG90bHkoQWdlX0JhcilgDQpgciBBZ2VfVGFiYA0KDQojIyBMZW5ndGggb2YgU3RheSBBbmFseXNpcw0KYGBge3IgTGVuZ3RoIG9mIFN0YXksIGVjaG89RkFMU0UsIGZpZy5hbGlnbiA9ICJjZW50ZXIifQ0KI0xlbmd0aCBvZiBTdGF5IEFuYWx5c2lzDQpMT1NUYWIgPC0gRGlzY2hhcmdlICU+JQ0KICBmaWx0ZXIoZGlzY2hhcmdlRGF0ZSA+IGFzLkRhdGUoIjIwMTYvMTEvMDEiKSwNCiAgICAgICAgIGRhdGVPZkFkbWlzc2lvbiA+IGFzLkRhdGUoIjIwMTYvMTEvMDEiKSkgJT4lDQogIG11dGF0ZSgNCiAgICBNb250aCA9IG1vbnRoKHN0YXJ0VGltZSksDQogICAgWWVhciA9IHllYXIoc3RhcnRUaW1lKSwNCiAgICBMT1MgPSBhcy5udW1lcmljKGFzLkRhdGUoZGlzY2hhcmdlRGF0ZSkgLSBhcy5EYXRlKGRhdGVPZkFkbWlzc2lvbikpDQogICkgJT4lDQogIGZpbHRlcihMT1MgPj0gMCkNCg0KTE9TVGFiICU+JQ0KICBzZWxlY3QoTE9TKSAlPiUNCiAgYm94cGxvdCgNCiAgICAuLA0KICAgIG1haW4gPSBwYXN0ZSgiRGlzdHJpYnV0aW9uIG9mIExlbmd0aCBvZiBTdGF5IChMT1MpIChuID0gIiwgbnJvdyhMT1NUYWIpLCAiKSIsIHNlcCA9DQogICAgICAgICAgICAgICAgICAgIiIpLA0KICAgIHhsYWIgPSAiRGF5cyIsDQogICAgeWxhYiA9ICJMT1MiLA0KICAgIGNvbCA9ICJyZWQiLA0KICAgIGJvcmRlciA9ICJibGFjayIsDQogICAgaG9yaXpvbnRhbCA9IFRSVUUsDQogICAgbm90Y2ggPSBGQUxTRQ0KICApDQoNCkxPU1RhYiAlPiUNCiAgc2VsZWN0KExPUykgJT4lDQogIHN0cmlwY2hhcnQoDQogICAgLiwNCiAgICB4bGFiID0gIkRheXMiLA0KICAgIHlsYWIgPSAiTE9TIiwNCiAgICBtZXRob2QgPSAiaml0dGVyIiwNCiAgICBjb2wgPSAiYmxhY2siDQogICkNCmBgYA0KDQpgYGB7ciBMZW5ndGggb2YgU3RheSAyLCBlY2hvPUZBTFNFfQ0KTE9TU3VtbWFyeSA8LSBEYXRhU3VtbWFyeShMT1NUYWIkTE9TKQ0Kb3V0bGllciA8LSAgcm91bmQoMTAwICogbnJvdyhmaWx0ZXIoTE9TVGFiLCBvdXRsaWVyVGVzdChMT1MsIExPU1N1bW1hcnkpKSkgLyBucm93KExPU1RhYiksIDIpDQpgYGANCmAgYHIgb3V0bGllcmAlIGAgb2YgcGF0aWVudCdzIHdlcmUgYXNzZXNzZWQgdG8gaGF2ZSBvdXRsaWVyIGxlbmd0aCBvZiBzdGF5cy4gVGhpcyB3YXMgYXNzZXNzZWQgYnkgbWVhbnMgb2YgYSBjdXRvZmYgb2YgJDEuNSpJUVIkIGJlbG93IHRoZSBmaXJzdCBhbmQgYWJvdmUgdGhlIHRoaXJkIHF1YXJ0aWxlLg0KDQpgYGB7ciBMZW5ndGggb2YgU3RheSAzLCBpbmNsdWRlPUZBTFNFfQ0KZGVuc1Bsb3QgPC0gc2VsZWN0KExPU1RhYiwgZGlzY2hhcmdlRGF0ZSwgZGF0ZU9mQWRtaXNzaW9uLCBMT1MpICU+JQ0KICBmaWx0ZXIoTE9TID49IDApICU+JQ0KICBmaWx0ZXIoIW91dGxpZXJUZXN0KExPUywgTE9TU3VtbWFyeSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBkaXNjaGFyZ2VEYXRlLCB5ID0gTE9TKSkgKyBnZW9tX2hleChiaW5zID0gMjAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAwLjUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG91ciA9ICJibGFjayIpICsgc2NhbGVfZmlsbF92aXJpZGlzX2Mob3B0aW9uID0gIkQiKSArDQogIGxhYnMoeSA9ICJMZW5ndGggb2YgU3RheSIsDQogICAgICAgeCA9ICJEYXRlIiwNCiAgICAgICBmaWxsID0gIkNvdW50IikgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQoNCnBsb3RfZ2coDQogIGRlbnNQbG90LA0KICBtdWx0aWNvcmUgPSBUUlVFLA0KICB3aWR0aCA9IDcsDQogIGhlaWdodCA9IDcsDQogIHdpbmRvd3NpemUgPSBjKDE0MDAsODY2KSwNCiAgb2Zmc2V0X2VkZ2VzID0gVFJVRSwNCiAgc2NhbGUgPSAzMDAsDQogIHN1bmFuZ2xlPTIyNQ0KICApDQpyZW5kZXJfY2FtZXJhKA0KICBmb3YgPSA3MCwNCiAgem9vbSA9IDAuNjUsDQogIHBoaSA9IDMwLA0KICB0aGV0YSA9IDMzMA0KICApDQoNCiMgZGVuczNkIDwtIHNjZW5lM2QoKQ0KIyByZ2wuY2xvc2UoKQ0KIyByZ2x3aWRnZXQoZGVuczNkKQ0KDQpkZW5zUGxvdCA8LSBzZWxlY3QoTE9TVGFiLCBkaXNjaGFyZ2VEYXRlLCBkYXRlT2ZBZG1pc3Npb24sIExPUykgJT4lDQogIGZpbHRlcihMT1MgPj0gMCkgJT4lDQogIGZpbHRlcighb3V0bGllclRlc3QoTE9TLCBMT1NTdW1tYXJ5KSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGRpc2NoYXJnZURhdGUsIHkgPSBMT1MpKSArIGdlb21faGV4KGJpbnMgPSAyMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDAuNSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gImJsYWNrIikgKyBzY2FsZV9maWxsX3ZpcmlkaXNfYyhvcHRpb24gPSAiRCIpICsNCiAgbGFicyh0aXRsZSA9ICJMZW5ndGggb2YgU3RheSBwZXIgUGF0aWVudCB3aXRob3V0IE91dGxpZXJzIiwNCiAgICAgICB5ID0gIkxlbmd0aCBvZiBTdGF5IiwNCiAgICAgICB4ID0gIkRhdGUiLA0KICAgICAgIGZpbGwgPSAiQ291bnQiKSArIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpDQogICkNCmRlbnNfaGV4IDwtIGdncGxvdGx5KGRlbnNQbG90KQ0KDQoNCmBgYA0KIyMjIFBhdGllbnQgbGVuZ3RoIG9mIHN0YXkgZGVuc2l0eSB2aXN1YWxpemF0aW9uDQozRCBQbG90DQpgYGB7ciBMZW5ndGggb2YgU3RheSAzIC0gM0QgUGxvdCwgZWNobz1GQUxTRSwgY2FjaGU9VFJVRSwgZmlnLmFsaWduID0gImNlbnRlciJ9DQpyZW5kZXJfc25hcHNob3QoY2xlYXIgPSBUUlVFKQ0KcmdsLmNsb3NlKCkNCmBgYA0KMkQgUGxvdA0KYGBge3IgTGVuZ3RoIG9mIFN0YXkgMyAtIDJEIFBsb3QsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUUsIGZpZy5hbGlnbiA9ICJjZW50ZXIiLCBmaWcuaGVpZ2h0PSA1fQ0KZGVuc19oZXgNCmBgYA0KDQpgYGB7ciBMZW5ndGggb2YgU3RheSA0LCBlY2hvPUZBTFNFfQ0Kc3VwcHJlc3NNZXNzYWdlcygNCkxPU0FnZSA8LSBsZWZ0X2pvaW4oTE9TVGFiLCBFRCkgJT4lDQogIGZpbHRlcihMT1MgPj0gMCkgJT4lDQogIHJvd3dpc2UoKSAlPiUNCiAgbXV0YXRlKEFnZV9Hcm91cCA9IGFnZV9ncm91cHMoYWdlKSkNCikNCg0KTE9TQWdlJEFnZV9Hcm91cCA8LQ0KICBvcmRlcmVkKExPU0FnZSRBZ2VfR3JvdXAsDQogICAgICAgICAgbGV2ZWxzID0gYWdlX2xpc3QpDQoNCmdyb3VwX0xPUyA8LSBnZ3Bsb3QoTE9TQWdlLCBhZXMoeCA9IEFnZV9Hcm91cCwgeSA9IExPUykpDQoNCmdyb3VwX0xPU19Cb3ggPC0gZ3JvdXBfTE9TICsgZ2VvbV9ib3hwbG90KGZpbGwgPSAnZG9kZ2VyYmx1ZScpICsNCiAgbGFicyh0aXRsZSA9ICJMZW5ndGggb2YgU3RheSBwZXIgUGF0aWVudCBBZ2UgR3JvdXAiLA0KICAgICAgIHkgPSAiTGVuZ3RoIG9mIFN0YXkgKERheXMpIiwNCiAgICAgICB4ID0gIkFnZSBHcm91cCIpICsgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDMwKSkgKyANCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikpDQoNCmdyb3VwX0xPU19EZW5zaXR5IDwtDQogIGdyb3VwX0xPUyArIGdlb21fdmlvbGluKGZpbGwgPSAnZG9kZ2VyYmx1ZScsIHRyaW0gPSBGQUxTRSkgKyBzdGF0X3N1bW1hcnkoDQogICAgZnVuLnkgPSBtZWRpYW4sDQogICAgZ2VvbSA9ICJwb2ludCIsDQogICAgc2l6ZSA9IDEsDQogICAgY29sb3IgPSAiYmxhY2siDQogICkgKw0KICBsYWJzKHRpdGxlID0gIkxlbmd0aCBvZiBTdGF5IHBlciBQYXRpZW50IEFnZSBHcm91cCIsDQogICAgICAgeSA9ICJMZW5ndGggb2YgU3RheSAoRGF5cykiLA0KICAgICAgIHggPSAiQWdlIEdyb3VwIikgKyBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgNTApKSArIA0KICB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKSkNCg0KYWdlX0xPUyA8LSBnZ3Bsb3QoTE9TQWdlLCBhZXMoeCA9IGFnZSwgeSA9IExPUykpICsgZ2VvbV9zbW9vdGgoKSArDQogIGxhYnModGl0bGUgPSAiTGVuZ3RoIG9mIFN0YXkgdnMgUGF0aWVudCBBZ2UiLA0KICAgICAgIHkgPSAiTGVuZ3RoIG9mIFN0YXkgKERheXMpIiwNCiAgICAgICB4ID0gIkFnZSIpICsgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDEyLjUpLCB4bGltID0gYygwLCAxMDApKSArIA0KICB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICAgICAgICApDQpgYGANCiMjIyBMZW5ndGggb2YgU3RheSBieSBBZ2UgR3JvdXANCmByIGdncGxvdGx5KGdyb3VwX0xPU19Cb3gpYA0KYHIgZ2dwbG90bHkoZ3JvdXBfTE9TX0RlbnNpdHkpYA0KYHIgZ2dwbG90bHkoYWdlX0xPUylgDQoNCmBgYHtyIElDRCwgZWNobz1GQUxTRX0NCnN1cHByZXNzTWVzc2FnZXMoDQpBZ2VJQ0QgPC0gbGVmdF9qb2luKHggPSBMT1NBZ2UsIHkgPSBEaWFnbm9zaXMpICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBJQ0QpICU+JQ0KICBsZWZ0X2pvaW4oeCA9IC4sIHkgPSBJQ0RCbG9jaykgJT4lDQogIGxlZnRfam9pbih4ID0gLiwgeSA9IElDRENoYXApDQopDQoNCkFnZUlDRCRJQ0RfQ2hhcHRlcl9TaG9ydCA8LQ0KICBvcmRlcmVkKEFnZUlDRCRJQ0RfQ2hhcHRlcl9TaG9ydCwgbGV2ZWxzID0gSUNEQ2hhcCRJQ0RfQ2hhcHRlcl9TaG9ydCkNCg0KQ2hhcF9DSSA8LSBNdWx0aV9DSShBZ2VJQ0QkSUNEX0NoYXB0ZXJfU2hvcnQpICU+JQ0KICByZW5hbWUoIklDRCBDaGFwdGVyIiA9IEZpZWxkcykNCkNoYXBfVGFiIDwtIGZvcm1hdHRhYmxlKA0KICBDaGFwX0NJLA0KICBhbGlnbiA9IGMoImwiLCByZXAoInIiLCBOQ09MKENoYXBfQ0kpIC0gMSkpLA0KICBsaXN0KA0KICAgICJJQ0QgQ2hhcHRlciIgPSBmb3JtYXR0ZXIoInNwYW4iLCBzdHlsZSA9IH4gc3R5bGUoDQogICAgICBjb2xvciA9ICJHcmV5IiwgZm9udC53ZWlnaHQgPSAiYm9sZCINCiAgICApKSwNCiAgICAiUGVyY2VudGFnZSAoJSkiID0gY29sb3JfdGlsZShncmVlbl9taW4sIGdyZWVuX21heCkNCiAgKQ0KKQ0KDQojRnVsbCBJQ0QgQ2hhcHRlciBCcmVha2Rvd24NCkZ1bGxfSUNEX0hpc3RvIDwtDQogIGdncGxvdChBZ2VJQ0QsIGFlcyh4ID0gSUNEX0NoYXB0ZXJfU2hvcnQpKSArIGdlb21fYmFyKGZpbGwgPSAncmVkJykgKyBnZW9tX3RleHQoDQogICAgc3RhdCA9ICdjb3VudCcsDQogICAgYWVzKGxhYmVsID0gLi5jb3VudC4uKSwNCiAgICB2anVzdCA9IC0wLjMsDQogICAgc2l6ZSA9IDMuNQ0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9IHBhc3RlKCJJQ0QgQ2hhcHRlciBCcmVha2Rvd24gKG4gPSAiLCBucm93KEFnZUlDRCksICIpIiwgc2VwID0gIiIpLA0KICAgIHkgPSAiQ291bnQiLA0KICAgIHggPSAiSUNEIENoYXB0ZXIiDQogICkgKyB0aGVtZSgNCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG91ciA9ICJibGFjayIpDQogICkNCg0KRnVsbF9JQ0RfQ2hhcCA8LSBnZ3Bsb3QoQWdlSUNELCBhZXMoDQogIHggPSBJQ0RfQ2hhcHRlcl9TaG9ydCwNCiAgeSA9IExPUw0KKSkNCg0KRnVsbF9JQ0RfQm94IDwtIEZ1bGxfSUNEX0NoYXAgKyBnZW9tX2JveHBsb3QoZmlsbCA9ICdkb2RnZXJibHVlJykgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkxlbmd0aCBvZiBTdGF5IHBlciBJQ0QgQ2hhcHRlciIsDQogICAgc3VidGl0bGUgPSAiQXJyYW5nZWQgYnkgbWVkaWFuIiwNCiAgICB5ID0gIkxlbmd0aCBvZiBTdGF5IChEYXlzKSIsDQogICAgeCA9ICJJQ0QgQ2hhcHRlciINCiAgKSArIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCA0MCkpICsgdGhlbWUoDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQoNCkZ1bGxfSUNEX0RlbnNpdHkgPC0NCiAgRnVsbF9JQ0RfQ2hhcCAgKyBnZW9tX3Zpb2xpbihmaWxsID0gJ2RvZGdlcmJsdWUnLCB0cmltID0gRkFMU0UpICsgc3RhdF9zdW1tYXJ5KA0KICAgIGZ1bi55ID0gbWVkaWFuLA0KICAgIGdlb20gPSAicG9pbnQiLA0KICAgIHNpemUgPSAxLA0KICAgIGNvbG9yID0gImJsYWNrIg0KICApICsNCiAgbGFicygNCiAgICB0aXRsZSA9ICJMZW5ndGggb2YgU3RheSBwZXIgSUNEIENoYXB0ZXIiLA0KICAgIHN1YnRpdGxlID0gIkFycmFuZ2VkIGJ5IG1lZGlhbiIsDQogICAgeSA9ICJMZW5ndGggb2YgU3RheSAoRGF5cykiLA0KICAgIHggPSAiSUNEIENoYXB0ZXIiDQogICkgKyBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgNDApKSArIHRoZW1lKA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKQ0KDQojVG9wIFRlbiBCcmVha2Rvd24NCnRvcF90ZW5fQ2hhcCA8LSBBZ2VJQ0QgJT4lDQogIHNlbGVjdChJQ0RfQ2hhcHRlcl9TaG9ydCkgJT4lDQogIHRhYmxlKCkgJT4lDQogIGFzLmRhdGEuZnJhbWUoKSAlPiUNCiAgYXJyYW5nZShkZXNjKEZyZXEpKSAlPiUNCiAgdG9wX24oLiwgMTAsIEZyZXEpICU+JQ0KICBzZWxlY3QoIi4iKQ0KDQp0b3BfdGVuX0FnZUlDRCA8LSBBZ2VJQ0QgJT4lDQogIHJvd3dpc2UoKSAlPiUNCiAgZmlsdGVyKElDRF9DaGFwdGVyX1Nob3J0ICVpbiUgdG9wX3Rlbl9DaGFwJC4pDQoNClRvcF9DaGFwX0JhciA8LQ0KICBnZ3Bsb3QodG9wX3Rlbl9BZ2VJQ0QsIGFlcyh4ID0gZmN0X3Jlb3JkZXIoSUNEX0NoYXB0ZXJfU2hvcnQsIExPUywgLmZ1biA9IG1lZGlhbiwgLmRlc2MgPSBUUlVFKSkpICsgZ2VvbV9iYXIoZmlsbCA9ICdyZWQnKSArIGdlb21fdGV4dCgNCiAgICBzdGF0ID0gJ2NvdW50JywNCiAgICBhZXMobGFiZWwgPSAuLmNvdW50Li4pLA0KICAgIHZqdXN0ID0gLTAuMywNCiAgICBzaXplID0gMy41DQogICkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gcGFzdGUoDQogICAgICAiVG9wIDEwIElDRCBDaGFwdGVyIEJyZWFrZG93biAobiA9ICIsDQogICAgICBucm93KHRvcF90ZW5fQWdlSUNEKSwNCiAgICAgICIpIiwNCiAgICAgIHNlcCA9ICIiDQogICAgKSwNCiAgICB5ID0gIkNvdW50IiwNCiAgICB4ID0gIklDRCBDaGFwdGVyIg0KICApICsgdGhlbWUoDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQoNClRvcF9JQ0RQbG90IDwtDQogIGdncGxvdCh0b3BfdGVuX0FnZUlDRCwgYWVzKA0KICAgIHggPSBmY3RfcmVvcmRlcihJQ0RfQ2hhcHRlcl9TaG9ydCwgTE9TLCAuZnVuID0gbWVkaWFuLCAuZGVzYyA9IFRSVUUpLA0KICAgIHkgPSBMT1MNCiAgKSkNCg0KVG9wX0lDRF9Cb3ggPC0gVG9wX0lDRFBsb3QgKyBnZW9tX2JveHBsb3QoZmlsbCA9ICdkb2RnZXJibHVlJykgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkxlbmd0aCBvZiBzdGF5IHBlciBJQ0QgY2hhcHRlciIsDQogICAgc3VidGl0bGUgPSAiQm94cGxvdHMgb2YgdGhlIDEwIG1vc3QgY29tbW9uIGNoYXB0ZXJzIGFycmFuZ2VkIGJ5IG1lZGlhbiIsDQogICAgeSA9ICJMZW5ndGggb2Ygc3RheSAoRGF5cykiLA0KICAgIHggPSAiSUNEIGNoYXB0ZXIiDQogICkgKyBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgNDApKSArIHRoZW1lKA0KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gImJsYWNrIikNCiAgKQ0KDQpUb3BfSUNEX1Zpb2xpbiA8LQ0KICBUb3BfSUNEUGxvdCArIGdlb21fdmlvbGluKGZpbGwgPSAnZG9kZ2VyYmx1ZScsIHRyaW0gPSBGQUxTRSkgKyBzdGF0X3N1bW1hcnkoDQogICAgZnVuLnkgPSBtZWRpYW4sDQogICAgZ2VvbSA9ICJwb2ludCIsDQogICAgc2l6ZSA9IDIsDQogICAgY29sb3IgPSAiYmxhY2siDQogICkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkxlbmd0aCBvZiBzdGF5IHBlciBJQ0QgY2hhcHRlciIsDQogICAgc3VidGl0bGUgPSAiRGVuc2l0eSBwbG90cyBvZiB0aGUgMTAgbW9zdCBjb21tb24gY2hhcHRlcnMgYXJyYW5nZWQgYnkgbWVkaWFuIiwNCiAgICB5ID0gIkxlbmd0aCBvZiBzdGF5IChEYXlzKSIsDQogICAgeCA9ICJJQ0QgY2hhcHRlciINCiAgKSArIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCA0MCkpICsgdGhlbWUoDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSAiYmxhY2siKQ0KICApDQpgYGANCg0KIyMgSUNEIEFuYWx5c2lzDQpgciBDaGFwX1RhYmANCg0KIyMjIEZ1bGwgRGF0YXNldA0KYHIgZ2dwbG90bHkoRnVsbF9JQ0RfSGlzdG8pYA0KYHIgZ2dwbG90bHkoRnVsbF9JQ0RfQm94KWANCmByIGdncGxvdGx5KEZ1bGxfSUNEX0RlbnNpdHkpYA0KDQojIyMgVG9wIFRlbiBDb2Rlcw0KYHIgZ2dwbG90bHkoVG9wX0NoYXBfQmFyKWANCmByIGdncGxvdGx5KFRvcF9JQ0RfQm94KWANCmByIGdncGxvdGx5KFRvcF9JQ0RfVmlvbGluKWANCg0KIyMjIERlbW9ncmFwaGljIElDRCBGbG93DQpgYGB7ciBJQ0QyLCBlY2hvPUZBTFNFfQ0KTWVyZ2VkTW9kIDwtIA0KICBNZXJnZWRJQ0QgJT4lDQogIHJvd3dpc2UoKSAlPiUNCiAgbXV0YXRlKEFnZV9Hcm91cCA9IGFnZV9ncm91cHMoYWdlKSkgJT4lDQogIGZpbHRlcihnZW5kZXIgIT0gIk90aGVyIikgJT4lDQogIHVuZ3JvdXAoKSAlPiUNCiAgZ3JvdXBfYnkoZ2VuZGVyLCBldGhuaWNpdHksIEFnZV9Hcm91cCwgSUNEX1RpdGxlKSAlPiUNCiAgY291bnQoKQ0KDQpNZXJnZWRNb2QkQWdlX0dyb3VwIDwtDQogIG9yZGVyZWQoTWVyZ2VkTW9kJEFnZV9Hcm91cCwNCiAgICAgICAgICBsZXZlbHMgPSBhZ2VfbGlzdCkNCg0KQWxsdXZfQ29kZSA8LSBNZXJnZWRNb2QgJT4lDQogIGZpbHRlcihuID4gMTAwKSAlPiUNCiAgZ2dwbG90KGFlcygNCiAgICBheGlzMSA9IGdlbmRlciwNCiAgICBheGlzMiA9IEFnZV9Hcm91cCwNCiAgICBheGlzMyA9IElDRF9UaXRsZSwNCiAgICB5ID0gbg0KICApKSArIGdlb21fYWxsdXZpdW0oYWVzKGZpbGwgPSBnZW5kZXIsIGNvbG91ciA9IGdlbmRlcikpICsgZ2VvbV9zdHJhdHVtKCkgKw0KICBnZW9tX3RleHQoDQogICAgc3RhdCA9ICJzdHJhdHVtIiwNCiAgICBsYWJlbC5zdHJhdGEgPSBUUlVFLA0KICAgIHNpemUgPSAzLA0KICAgIGxhYmVsID0gYygNCiAgICAgICJNYWxlIiwNCiAgICAgICJGZW1hbGUiLA0KICAgICAgIkFnZWQiLA0KICAgICAgIk1pZGRsZSBBZ2VkIiwNCiAgICAgICJBZHVsdCIsDQogICAgICAiQWRvbGVzY2VudCIsDQogICAgICAiU2tpbiAmIFN1YmN1dCBJbmZlY3Rpb25zIiwNCiAgICAgICJHYWxsYmxhZGRlcixcbkJpbGlhcnkgVHJhY3RcbiYgUGFuY3JlYXMiLA0KICAgICAgIk90aGVyIEludGVzdGluYWwiLA0KICAgICAgIkhlcm5pYSIsDQogICAgICAiQXBwZW5kaXgiLA0KICAgICAgIk9lc29waGFndXMsXG5TdG9tYWNoICYgRGVvZGVudW0iLA0KICAgICAgIkJyZWFzdCBOZW9wbGFzbSIsDQogICAgICAiRGlnZXN0aXZlXG5OZW9wbGFzbSIsDQogICAgICAiTi9BIg0KICAgICkNCiAgKSArDQogIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gYygiU2V4IiwgIkFnZSBHcm91cCIsICJJQ0QgQmxvY2siKSwNCiAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAuMSwgMC4xKSkgKyB0aGVtZV9taW5pbWFsKCkgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIikpICsNCiAgbGFicygNCiAgICB0aXRsZSA9IHBhc3RlKCJHZW5lcmFsIElDRDEwIENvZGUgQnJlYWtkb3duIChuPSIsIG5yb3coRUQpLCAiKSIsIHNlcCA9ICIiKSwNCiAgICBzdWJ0aXRsZSA9ICJTdHJhdGlmaWVkIGJ5IFNleCwgQWdlIEdyb3VwICYgSUNEIENvZGUiLA0KICAgIHkgPSAiRnJlcXVlbmN5Ig0KICApDQoNCk1lcmdlZE1vZDIgPC0NCiAgTWVyZ2VkSUNEICU+JSAjR2VuZXJhdGVzIE1lcmdlZCBMaXN0IG9mIFBhdGllbnRzIG9uIFNleCwgQWdlIEdyb3VwICYgSUNEIENoYXB0ZXINCiAgcm93d2lzZSgpICU+JQ0KICBtdXRhdGUoQWdlX0dyb3VwID0gYWdlX2dyb3VwcyhhZ2UpKSAlPiUNCiAgZmlsdGVyKGdlbmRlciAhPSAiT3RoZXIiKSAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBncm91cF9ieShnZW5kZXIsIGV0aG5pY2l0eSwgQWdlX0dyb3VwLCBJQ0RfQ2hhcHRlcikgJT4lDQogIGNvdW50KCkNCg0KTWVyZ2VkTW9kMiRBZ2VfR3JvdXAgPC0NCiAgb3JkZXJlZCgNCiAgICBNZXJnZWRNb2QyJEFnZV9Hcm91cCwNCiAgICBsZXZlbHMgPSBhZ2VfbGlzdA0KICApDQoNCkFsbHV2X0NoYXAgPC0gTWVyZ2VkTW9kMiAlPiUNCiAgZmlsdGVyKG4gPiAxMDApICU+JQ0KICBnZ3Bsb3QoYWVzKA0KICAgIGF4aXMxID0gZ2VuZGVyLA0KICAgIGF4aXMyID0gQWdlX0dyb3VwLA0KICAgIGF4aXMzID0gSUNEX0NoYXB0ZXIsDQogICAgeSA9IG4NCiAgKSkgKyBnZW9tX2FsbHV2aXVtKGFlcyhmaWxsID0gZ2VuZGVyLCBjb2xvdXIgPSBnZW5kZXIpKSArIGdlb21fc3RyYXR1bSgpICsNCiAgZ2VvbV90ZXh0KA0KICAgIHN0YXQgPSAic3RyYXR1bSIsDQogICAgbGFiZWwuc3RyYXRhID0gVFJVRSwNCiAgICBzaXplID0gNCwNCiAgICBsYWJlbCA9IGMoDQogICAgICAiTWFsZSIsDQogICAgICAiRmVtYWxlIiwNCiAgICAgICJBZ2VkIiwNCiAgICAgICJNaWRkbGUgQWdlZCIsDQogICAgICAiQWR1bHQiLA0KICAgICAgIllvdW5nIEFkdWx0IiwNCiAgICAgICJBZG9sZXNjZW50IiwNCiAgICAgICJHZW5pdG91cmluYXJ5IFN5c3RlbSIsDQogICAgICAiU2tpbiAmIFN1YmN1dCBUaXNzdWUiLA0KICAgICAgIkRpZ2VzdGl2ZSBTeXN0ZW0iLA0KICAgICAgIkNpcmN1bGF0b3J5IFN5c3RlbSIsDQogICAgICAiTmVvcGxhc21zIiwNCiAgICAgICJOL0EiDQogICAgKQ0KICApICsNCiAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSBjKCJTZXgiLCAiQWdlIEdyb3VwIiwgIklDRCBDaGFwdGVyIiksDQogICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLjEsIDAuMSkpICsgdGhlbWVfbWluaW1hbCgpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSBwYXN0ZSgiR2VuZXJhbCBJQ0QxMCBDaGFwdGVyIEJyZWFrZG93biAobj0iLCBucm93KEVEKSwgIikiLCBzZXAgPSAiIiksDQogICAgc3VidGl0bGUgPSAiU3RyYXRpZmllZCBieSBTZXgsIEFnZSBHcm91cCAmIElDRCBDaGFwdGVyIiwNCiAgICB5ID0gIkZyZXF1ZW5jeSINCiAgKQ0KYGBgDQoNCiMjIyMgSUNEIENoYXB0ZXIgU2Fua2V5IEZsb3cNCmBgYHtyIElDRDIgLSBBbGx1djEsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQgPSAxMCwgZmlnLndpZHRoID0gMTV9DQpBbGx1dl9DaGFwDQpgYGANCg0KIyMjIyBJQ0QgQ29kZSBTYW5rZXkgRmxvdw0KYGBge3IgSUNEMiAtIEFsbHV2MiwgZWNobz1GQUxTRSwgZmlnLmhlaWdodCA9IDEwLCBmaWcud2lkdGggPSAxNX0NCkFsbHV2X0NvZGUNCmBgYA0KDQoNCg0K